home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / dfue / fax / fddk / fddk.txt < prev    next >
Text File  |  1992-02-02  |  9KB  |  227 lines

  1.  
  2.          --------------------------------
  3.         |                                |
  4.         |            F D D K             |
  5.         |                                |
  6.         |   FAXDRIVER DEVELOPMENT KIT    |
  7.         |                                |
  8.          --------------------------------
  9.  
  10. Der Inhalt dieses Folders darf kopiert und weitergegeben
  11. werden, solange er nicht verändert wird.
  12.  
  13. Folgende Dateien gehören dazu:
  14.  
  15.  
  16. FDDK.TXT     (diese Datei)
  17. QFAXDRV.O    (das eigentliche Faxmodul)
  18. QFAXDRV.H    (der dazugehörige ANSI-C-Header)
  19. MINIDEMO.C   (wie der Name schon sagt..)
  20. MINIDEMO.PRJ (das dazugehörige Turbo-C Project-File)
  21. ASC_FAX.C    (konvertiert ASCII zu FAX)
  22. ASC_FAX.PRJ  (das dazugehörige Turbo-C Project-File)
  23. QFAX.INF     (die Konfig-Datei für die fertigen Treiber)
  24. TESTFAX.F01  (1/4 Seite im Faxformat)
  25. PEEKFAX.PRG  (zum 'Ansehen' von Faxseiten) 
  26. PEEKFAX.RSC
  27.  
  28.  
  29. Erzeugen von Faxseiten mit jeder beliebigen Applikation
  30. -------------------------------------------------------
  31.  
  32. "Ganz einfach nur Druckfunktion starten, Faxnummer eingeben 
  33. und ferig?" Ein kleines Object-Modul ermöglicht es einem 
  34. C-Programmierer mit jeder beliebigen Applikation Faxseiten 
  35. zu erzeugen. Auf das eher unbequeme Arbeiten mit Programmen, 
  36. die das Erzeugen von Faxseiten selbst übernehmen könnte man 
  37. dann verzichten. Das Besondere: dieses Modul ist 
  38. Public-Domain und die damit erzeugten Faxtreiber können 
  39. problemlos weitergegeben werden! 
  40.  
  41. Ich möchte hier die nötigen Funktionsaufrufe 
  42. beschreiben, und die Benutzung anhand eines kleinen 
  43. C-Programmes demonstrieren. An dieser Stelle sollte nicht 
  44. verschwiegen werden, daß das Erzeugen von Faxseiten auf 
  45. anderen Betriebssystemen zentral übernommen wird (siehe 
  46. Next). Das ist natürlich besonders bequem. Durch den hier 
  47. vorgeschlagene Weg ergibt sich aber ein anderer, 
  48. entscheidenden Vorteil: jeder einzelne, der rund 4.000.000 
  49. Pixel auf einer Faxseite, wird von der Applikation gesetzt. 
  50. Dadurch können mögliche Qualtiätsverluste durch eine 
  51. Wandlung der vorgesehenen Auflösung nach 200 dpi sicher 
  52. vermieden werden. Faxtreiber für Calamus, CyPress und andere 
  53. Programme liegen schon vor. 
  54.  
  55.  
  56.  
  57. WIE FUNKTIONIERT ES ?
  58.  
  59. Zunächst möchte ich die Funktionsweise eines solchen 'Fax- 
  60. Treibers' erläutern. Diese werden vom Benutzer wie normale 
  61. Druckertreiber nachgeladen und nehmen dann die Daten von der 
  62. Applikation entgegen. Allerdings wird zu diesem Zeitpunkt 
  63. noch nicht gefaxt. Statt dessen werden die Daten komprimiert 
  64. und in einer Art Warteschlange auf die Festplatte 
  65. zwischengespeichert. Der verwendete Huffman-Algorithmus 
  66. komprimiert die Daten auf bis zu 10% der ursprünglichen 
  67. Größe. Die Seiten in der Fax-Queue werden später auf Wunsch 
  68. und in einem Rutsch versendet. Ein positiver Effekt dieses 
  69. Verfahrens ergibt sich aus der Möglichkeit ein Fax mit Hilfe 
  70. mehrerer Applikationen zu erstellen. So könnte man z.B die 
  71. erste Seite mit der Textverarbeitung erstellen und eine 
  72. zweite Seite mit Calamus erstellen. 
  73.  
  74.  
  75.  
  76. 5 plus 1 Funktionen
  77.  
  78. Das Object-Modul 'QFAXDRV.O', setzt sich aus den hier 
  79. aufgeführten 6 Funktionen zusammen. In der Datei 'QFAXDRV.H' 
  80. befinden sich neben den Funktionsprototypen auch die 
  81. Definitionen für Fehlermeldungen. 
  82.  
  83.     int qfax_init (void)
  84.  
  85. Diese Funktion dient zur Initialisierung des Treibers und 
  86. sollte einmal, zu allererst aufgerufen werden. Parameter 
  87. werden hier keine übergeben. Wird (in Register D0) ein Wert 
  88. ungleich Null zurückgegeben, liegt ein Fehler vor. Der Wert 
  89. ERR_INIT deutet auf eine nicht vorhandene, bzw. fehlerhafte 
  90. Konfigurationsdatei. Die Rückgabe des Wertes ERR_PATH 
  91. bedeutet, daß der Pfad in der Konfiguration nicht gefunden 
  92. werden konnte. 
  93.  
  94.  
  95.     int qfax_open (char *applic)
  96.  
  97. Zu Beginn einer neuen Seite wird diese Funktion aufgerufen. 
  98. Sie erstellt die Ausgabedatei inklusive Fax-Header. Als 
  99. Argument muß (in A0) ein Dateiname übergeben werden 
  100. (Null-Terminiert, nicht vergessen). Dieser sollte mindestens 
  101. 6 aber maximal 8 Zeichen lang sein und auf die erzeugende 
  102. Applikation deuten (z.B.: 'CALFAX', 'CYPFAX' etc.). Ein 
  103. Return-Wert ungleich 0 deutet auch hier auf einen Fehler. 
  104. Der Wert ERR_CREATE weist darauf hin, daß nicht geschrieben 
  105. werden konnte.
  106.  
  107.  
  108.     int qfax_pix (unsigned char *pixptr, int lines)
  109.  
  110. Diese Funktion wird benutzt um Bitmap zu erzeugen. 
  111. Dabei wird in 'lines' angegeben, wie oft die Pixelzeile 
  112. in 'pixptr' wiederholt werden soll. In der Regel 
  113. wird also in 'lines' eine '1' übergegeben. Der Parameter 
  114. 'pixptr' zeigt auf einen genau 216 Bytes großen 
  115. Speicherbereich, indem sich eine Zeile Pixel befinden. Die 
  116. Applikation stellt diesen Bereich zur Verfügung. 216 * 8 = 
  117. 1728 Pixel pro Zeile sind das Standard-Format für die Breite 
  118. von 200 dpi-Faxseiten und müssen unbedingt eingehalten werden. 
  119. Evtl. muß die Vorlage gestaucht werden. Eine Vorlage in einer 
  120. Auflösung von 300 dpi muß also zuvor auf 2/3 gestaucht werden.
  121. Nicht vergessen, daß dann auch die Vertikale im selben 
  122. Verhältniss gestaucht werden muß!
  123. Die Pixelzeile wird nun komprimiert und gespeichert. 
  124. Hierbei benutzt der Treiber einen internen, 8 KByte großen 
  125. Cachespeicher. Diese Funktion gibt den Wert ERR_WRITE 
  126. zurück, wenn ein Fehler beim schreiben aufgetreten ist. Bei 
  127. fehlerfreier Funktion wird ein Wert größer '0' zurückgegeben 
  128. der aussagt, auf wieviele Bytes komprimiert wurde. Es spielt 
  129. absolut keine Rolle wie oft diese Funktion aufgerufen wird, 
  130. weil eine Faxseite beliebig lang bzw. kurz sein kann. 2240 
  131. Pixelzeilen ergeben eine Faxseite von 29.68 cm höhe (= DIN-A 
  132. 4). Etwa 75 Aufrufe ergeben 1 cm Fax! 
  133.  
  134.  
  135.     int qfax_text (char *string)
  136.  
  137. Diese Funktion wird benutzt um Text auf eine Faxseite zu 
  138. schreiben. Es wird ein im Modul integrierter Font verwendet, 
  139. der sich besonders für die Übertragung im Faxformat eignet. 
  140. Der Font erzeugt nämlich besonders 'wenig' Hufman-Code und 
  141. beschleunigt damit die Übertragung. Pro Textzeile werden 32 
  142. Pixelzeilen erzeugt. Auf eine A4-Seite maximal 70 Zeilen 
  143. Text. Pro Zeile können bis zu 98 Zeichen untergebracht 
  144. werden. Es dürfen keine Steuerzeichen, auch kein Linefeed 
  145. übergeben werden. Diese Funktion gibt ebenfalls den Wert 
  146. ERR_WRITE zurück, wenn ein Fehler beim Schreiben aufgetreten 
  147. ist. Bei fehlerfreier Funktion wird ein Wert größer '0' 
  148. zurückgegeben der aussagt, wieviel Bytes erzeugt wurden. 
  149.  
  150.  
  151.     int qfax_close (void)
  152.  
  153. Diese Funktion wird am Seitenende aufgerufen. Sie füllt den 
  154. Fax-Header mit den richtigen Werten und schließt die Datei. 
  155. Ein Return-Wert ungleich '0' deutet auf einen Fehler beim 
  156. Schreiben. Wenn alles fehlerfrei funktioniert hat, kann die 
  157. nächste Seite geöffnet werden. 
  158.  
  159.  
  160.     int qfax_clr (void)
  161.  
  162. Mit dieser Funktion kann die Queue, z.B. vor dem erzeugen 
  163. neuer Seiten, gelöscht werden. Wird danach eine neue 
  164. Faxseite angelegt, erhält diese die Erweiterung '.F01' im 
  165. Dateinamen. Die nächste Seite '.F02' usw.
  166. Das geschieht ganz automatisch.
  167.  
  168. Der Treiber kann übrigens problemlos wieder entfernt werden. 
  169. Die Erzeugten Seiten werden in der Fax-Queue gespeichert, 
  170. was nichts anderes ist als ein Directory, das speziell dafür 
  171. angelegt wurde. Hier zum Beispiel der Inhalt dieses 
  172. Verzeichnisses nachdem drei Seite mit verschiedenen 
  173. Applikationen erzeugt wurden: 
  174.  
  175.     "CYPRESS .F01"
  176.     "ASCII   .F02"
  177.     "CALAMUS .F03"
  178.  
  179. Für jede Seite wurde eine Datei angelegt. Die nächste Seite 
  180. würde die Erweiterung ".F04" erhalten. Der Dateiname vor der 
  181. Erweiterung spielt für das Versenden keine Rolle. Er gibt 
  182. dem Benutzer nur Auskunft darüber, welches Programm die 
  183. Seiten erzeugt hat.
  184.  
  185.  
  186.  
  187. FORMAT DER FAX-DATEI
  188. --------------------
  189.  
  190.  01-24  : reserved
  191.  25     : 01 = 1-Dim, 02 = 2-Dim
  192.  26-27  : Seiten in Pixelzeilen             (sorry: INTEL-Format)
  193.  28-29  : Breite in Pixeln, z.Z. immer 1728 (sorry: INTEL-Format)
  194.  30     : Auflösung 0 = 100 dpi, 1 = 200 dpi
  195.  31-255 : reserved
  196. 256-eof : huffman-code
  197.  
  198.  
  199. DEMO-PROGRAMME IN ANSI-C
  200. ------------------------
  201.  
  202. Die beiliegenden C-Sourcen 'MINIDEMO.C' und 'ASC_FAX.C' zeigen, 
  203. wie einfach die Benutzung der hier vorgestellten Funktionen ist. 
  204.  
  205. Das Accessory "QFAX.ACC" gestattet das Versenden der 
  206. erzeugten Seiten an einen oder mehrere Empfänger. Die mit 
  207. dem Modul erzeugten Faxseiten und das Modul selbst dürfen 
  208. frei weitergegeben werden. Eine V e r m a r k t u n g solcher 
  209. Treiber bedarf der schriftlichen Genehmigung des Autors. 
  210.  
  211. Neben den hier vorgestellten Möglichkeiten zum Erzeugen von 
  212. Faxseiten existiert ein erweitertes Modul, daß einer beliebigen 
  213. Applikation das direkte Versenden von Faxen gestattet. 
  214.  
  215. Informationen hierzu erhalten Sie bei:
  216.  
  217.                      Computer & Design
  218.                      Eppenhauser Straße 59
  219.                      5800 Hagen-1
  220.                      Telefon (02331) - 58 98 42
  221.                      Telefax (02331) -  5 42 03 
  222.  
  223. Wenn Sie bis hier hin gelesen haben, bedanke ich mich herzlich für
  224. Ihre Geduld.
  225.  
  226. Tim Mehrvarz
  227.